﻿// explicitcall.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <Windows.h>// 显式加载 dll 时用到的库函数：LoadLibrary，GetProcAddress，FreeLibrary
#include <tchar.h>// 加载 lib 文件时的路径是宽字符

typedef int(*DEC_FUNC)(int a,int b);// 声明dll中的导出函数

int main()
{
    std::cout << "Hello World!\n\r";
	HMODULE hModule = LoadLibrary(_T("./dlldemo.dll"));
	if (hModule == NULL) {
		printf("加载 dlldemo.lib 失败，程序退出！\r\n");
		system("pause");
		return 0;
	}

	//DEC_FUNC dec_fp = (DEC_FUNC)GetProcAddress(hModule, "add");// 没有获取到函数则返回 NULL
	DEC_FUNC dec_fp = (DEC_FUNC)GetProcAddress(hModule, MAKEINTRESOURCEA(1));// 也可以通过导出函数的序号（depends可以查看序号）,注意使用后缀有A的窄字节函数
	if (dec_fp == NULL) {
		printf("没有找到名称是 add 的函数！\r\n");
		return 0;
	}

	int r = dec_fp(3, 5);
	FreeLibrary(hModule);
	printf("3+5 = %d\r\n", r);
	system("pause");
}
